import { sysProfile, sysUser } from '@/api/user'
import router, { otherRoutes, constantRoutes, resetRouter } from '@/router'

export default {
  namespaced: true,
  state: {
    // 持久化：1：值修改了存储到浏览器 2：初始值读取浏览器存储
    // vuex持久化插件 vuex-persistedstate
    // 1:下载安装  npm i vuex-persistedstate -f
    // 2:导入，在store/index.js导入  import persistedstate from 'vuex-persistedstate'
    // 3:配制使用  plugins:[persistedstate({paths:['模块名.字段名']})]
    // token: localStorage.getItem('token') || ''
    token: '',
    userInfo: {}
  },
  mutations: {
    setToken(state, value) {
      state.token = value
      // localStorage.setItem('token', value)
      // localStorage.setItem(key,value)
      // localStorage.getItem(key)
      // localStorage.removeItem(key)
    },
    setUserInfo(state, value) {
      state.userInfo = value
    },
    // 删除token与用户信息
    logout(state) {
      state.token = ''
      state.userInfo = {}
      resetRouter()
    }
  },
  getters: {},
  actions: {
    // 获取用户信息
    async getUserInfo(store) {
      const res = await sysProfile()
      const res2 = await sysUser(res.data.userId)
      store.commit('setUserInfo', { ...res.data, ...res2.data })

      // 将用户信息中的权限点数据与动态路由做匹配，将匹配后的数据添加到路由配置中
      const newArr = otherRoutes.filter(item => {
        // 菜单权限与子权限点都做匹配，这要求子权限点的标识code需要以父权限点的标识'code_'开头
        return (
          res.data.roles.menus.includes(item.meta.code) ||
          res.data.roles.points.some(point => item.meta.code.includes(point.split('_')[0]))
        )
      })
      newArr.push({ path: '*', redirect: '/404', hidden: true })
      // 将匹配到的路由添加到路由配置中
      router.addRoutes(newArr)
      // 手动更新
      router.options.routes = [...constantRoutes, ...newArr]
    }
  }
}
